package com.example.springboot.config;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.example.springboot.domain.User;
import com.example.springboot.domain.UserExcl;
import com.example.springboot.services.UserService;
import com.example.springboot.utils.ThreadLocalUtil;
import com.example.springboot.utils.UuidUtils;
import org.springframework.stereotype.Component;

import java.util.Random;

@Component
public class UserListener extends AnalysisEventListener<UserExcl> {


//    //自定义用于暂时存储data
//    private List<User> datas = new ArrayList<>();
//    //导入表头
//    private String importHeads = "";
//    //模版表头
//    private String modelHeads = "";
    public UserService userService;

    static Integer count;

    Random rand = new Random();

    public UserListener(){
        count=0;
    }

    public UserListener(UserService userService) {
        this.userService = userService;
    }
    private User user = new User();
    
    /**
     * 通过 AnalysisContext 对象还可以获取当前 sheet，当前行等数据
     */
    @Override
    public void invoke(UserExcl userExcl, AnalysisContext analysisContext) {

        if(userExcl != null){
            user.setSex(userExcl.getSexName().equals("男") ? 1 : 2);
            user.setUsername(userExcl.getUsername());
            user.setName(userExcl.getName());
            user.setId(Math.abs(UuidUtils.getId()) - (rand.nextInt(1000)+1));
            Boolean flag = userService.addUser(user);
            if(flag){
                count++;
            }
        }
//    	Integer currentRowNum = analysisContext.getCurrentRowNum();
//    	//获取导入表头，默认第一行为表头
//    	if(currentRowNum == 0){
//        	try {
//        		Map<String,Object> m = objToMap(user);
//        		for (Object v : m.values()) {
//        			importHeads += String.valueOf(v).trim() + ",";
//     			}
//    		} catch (Exception e) {
//    			e.printStackTrace();
//    		}
//    	}else{
//    		datas.add(user);
//    	}
    }



    /**
     * 读取完之后的操作
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

        ThreadLocalUtil.setObject(count);
    	//获取模版表头
//    	ExcelHeadProperty ehp = analysisContext.getExcelHeadProperty();
//    	for(List<String> s : ehp.getHead()){
//    		modelHeads += s.get(0) + ",";
//    	}
    }


//    public List<Object> getDatas() {
//        return datas;
//    }
//
//    public void setDatas(List<Object> datas) {
//        this.datas = datas;
//    }
//
//    public String getImportHeads() {
//	    return importHeads;
//    }
//
//    public void setImportHeads(String importHeads) {
//	    this.importHeads = importHeads;
//    }
//
//    public String getModelHeads() {
//	    return modelHeads;
//    }
//
//    public void setModelHeads(String modelHeads) {
//	    this.modelHeads = modelHeads;
//    }
 
    //Object转换为Map
//    public  Map<String,Object> objToMap(Object obj) throws Exception{
//        Map<String,Object> map = new LinkedHashMap<String, Object>();
//        Field[] fields = obj.getClass().getDeclaredFields();
//        for(Field field : fields){
//            field.setAccessible(true);
//            map.put(field.getName(), field.get(obj));
//        }
//        return map;
//    }
}
 